drawio_dsl 0.5.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.builders/.data/shapes.json +49 -22
- data/.builders/.templates/basic/dom_builder_shapes.rb +2 -2
- data/.builders/.templates/basic/drawio_extensions.rb +57 -0
- data/.builders/.templates/basic/drawio_shapes.rb +2 -2
- data/.builders/blueprint/shapes.rb +10 -5
- data/.builders/generators/10-transform-drawio-js.rb +195 -0
- data/.builders/generators/20-drawio-extensions.rb +41 -0
- data/.builders/generators/project_plans/drawio_dsl.rb +30 -21
- data/.builders/generators/sample_diagrams/15-grid-direction.rb +0 -8
- data/.builders/generators/sample_diagrams/20-styles.rb +1 -2
- data/.builders/generators/sample_diagrams/30-html-shapes.rb +48 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +28 -0
- data/docs/extensions/analyti_cs.svg +3 -0
- data/docs/extensions/android_inputs.svg +3 -0
- data/docs/extensions/app_services.svg +3 -0
- data/docs/extensions/appliances.svg +3 -0
- data/docs/extensions/arrows.svg +3 -0
- data/docs/extensions/aws_17___analyti_cs.svg +3 -0
- data/docs/extensions/aws_17___application_services.svg +3 -0
- data/docs/extensions/aws_17___artificial_intelligence.svg +3 -0
- data/docs/extensions/aws_17___business_productivity.svg +3 -0
- data/docs/extensions/aws_17___compute.svg +3 -0
- data/docs/extensions/aws_17___contact_center.svg +3 -0
- data/docs/extensions/aws_17___containers.svg +3 -0
- data/docs/extensions/aws_17___database.svg +3 -0
- data/docs/extensions/aws_17___desktop_app_straning.svg +3 -0
- data/docs/extensions/aws_17___developer_tools.svg +3 -0
- data/docs/extensions/aws_17___game_development.svg +3 -0
- data/docs/extensions/aws_17___general.svg +3 -0
- data/docs/extensions/aws_17___io_t.svg +3 -0
- data/docs/extensions/aws_17___management.svg +3 -0
- data/docs/extensions/aws_17___messaging.svg +3 -0
- data/docs/extensions/aws_17___migration.svg +3 -0
- data/docs/extensions/aws_17___mobile_services.svg +3 -0
- data/docs/extensions/aws_17___networking_content_delivery.svg +3 -0
- data/docs/extensions/aws_17___on_demand_workforce.svg +3 -0
- data/docs/extensions/aws_17___sdks.svg +3 -0
- data/docs/extensions/aws_17___serurity_identity_and_compliance.svg +3 -0
- data/docs/extensions/aws_17___storage.svg +3 -0
- data/docs/extensions/aws_19___application_integration.svg +3 -0
- data/docs/extensions/aws_19___ar_vr.svg +3 -0
- data/docs/extensions/aws_19___blockchain.svg +3 -0
- data/docs/extensions/aws_19___business_applications.svg +3 -0
- data/docs/extensions/aws_19___compute.svg +3 -0
- data/docs/extensions/aws_19___cost_management.svg +3 -0
- data/docs/extensions/aws_19___customer_engagement.svg +3 -0
- data/docs/extensions/aws_19___database.svg +3 -0
- data/docs/extensions/aws_19___desktop_app_streaming.svg +3 -0
- data/docs/extensions/aws_19___developer_tools.svg +3 -0
- data/docs/extensions/aws_19___ec2_instance_types.svg +3 -0
- data/docs/extensions/aws_19___game_tech.svg +3 -0
- data/docs/extensions/aws_19___general.svg +3 -0
- data/docs/extensions/aws_19___groups_note_repeated_below_without_v2.svg +3 -0
- data/docs/extensions/aws_19___internet_of_things.svg +3 -0
- data/docs/extensions/aws_19___machine_learning.svg +3 -0
- data/docs/extensions/aws_19___management_governance.svg +3 -0
- data/docs/extensions/aws_19___media_services.svg +3 -0
- data/docs/extensions/aws_19___migration_transfer.svg +3 -0
- data/docs/extensions/aws_19___mobile.svg +3 -0
- data/docs/extensions/aws_19___networking_content_delivery.svg +3 -0
- data/docs/extensions/aws_19___roboti_cs.svg +3 -0
- data/docs/extensions/aws_19___satellite.svg +3 -0
- data/docs/extensions/aws_19___security_identity_compliance.svg +3 -0
- data/docs/extensions/aws_19___storage.svg +3 -0
- data/docs/extensions/aws_19_analyti_cs.svg +3 -0
- data/docs/extensions/aws_general.svg +3 -0
- data/docs/extensions/azure2019.svg +3 -0
- data/docs/extensions/azure_cloud.svg +3 -0
- data/docs/extensions/azure_enterprise.svg +3 -0
- data/docs/extensions/azure_vms.svg +3 -0
- data/docs/extensions/basic_network_shapes.svg +3 -0
- data/docs/extensions/beds.svg +3 -0
- data/docs/extensions/bpmn_2_0.svg +3 -0
- data/docs/extensions/cisco_basic.svg +3 -0
- data/docs/extensions/cisco_extended.svg +3 -0
- data/docs/extensions/common_elements.svg +3 -0
- data/docs/extensions/computers_and_monitors.svg +3 -0
- data/docs/extensions/containers.svg +3 -0
- data/docs/extensions/content_delivery.svg +3 -0
- data/docs/extensions/couches.svg +3 -0
- data/docs/extensions/cubicle_walls.svg +3 -0
- data/docs/extensions/data_flow.svg +3 -0
- data/docs/extensions/database.svg +3 -0
- data/docs/extensions/deployment.svg +3 -0
- data/docs/extensions/desks.svg +3 -0
- data/docs/extensions/detailed_network_diagrams.svg +3 -0
- data/docs/extensions/developer_tools.svg +3 -0
- data/docs/extensions/doors_windows.svg +3 -0
- data/docs/extensions/ec2.svg +3 -0
- data/docs/extensions/electrical.svg +3 -0
- data/docs/extensions/electroni_cs.svg +3 -0
- data/docs/extensions/enterprise_application.svg +3 -0
- data/docs/extensions/equipment.svg +3 -0
- data/docs/extensions/ext_shapes.svg +3 -0
- data/docs/extensions/flowchart.svg +3 -0
- data/docs/extensions/geometric_shapes.svg +3 -0
- data/docs/extensions/google_cloud_platform.svg +3 -0
- data/docs/extensions/heat_exchangers.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_controls.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_elements.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_icons.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_controls.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_elements.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_icons.svg +3 -0
- data/docs/extensions/i_os_devices.svg +3 -0
- data/docs/extensions/i_os_icons.svg +3 -0
- data/docs/extensions/i_os_mockups.svg +3 -0
- data/docs/extensions/i_os_ui_components.svg +3 -0
- data/docs/extensions/i_pad_elements.svg +3 -0
- data/docs/extensions/i_phone_elements.svg +3 -0
- data/docs/extensions/information.svg +3 -0
- data/docs/extensions/instruments.svg +3 -0
- data/docs/extensions/internet_of_things.svg +3 -0
- data/docs/extensions/kanban.svg +3 -0
- data/docs/extensions/kitchen.svg +3 -0
- data/docs/extensions/kubernetes_icons.svg +3 -0
- data/docs/extensions/logic_gates.svg +3 -0
- data/docs/extensions/materials.svg +3 -0
- data/docs/extensions/message_routing.svg +3 -0
- data/docs/extensions/message_transformation.svg +3 -0
- data/docs/extensions/messaging_channels.svg +3 -0
- data/docs/extensions/messaging_endpoints.svg +3 -0
- data/docs/extensions/messaging_systems.svg +3 -0
- data/docs/extensions/mind_map.svg +3 -0
- data/docs/extensions/misc.svg +3 -0
- data/docs/extensions/misc_floorplan.svg +3 -0
- data/docs/extensions/miscellaneous.svg +3 -0
- data/docs/extensions/mobile_services.svg +3 -0
- data/docs/extensions/network.svg +3 -0
- data/docs/extensions/networking.svg +3 -0
- data/docs/extensions/on_demand.svg +3 -0
- data/docs/extensions/piping.svg +3 -0
- data/docs/extensions/power_sources.svg +3 -0
- data/docs/extensions/processes.svg +3 -0
- data/docs/extensions/pumps.svg +3 -0
- data/docs/extensions/repeated_from_the_above.svg +3 -0
- data/docs/extensions/restroom.svg +3 -0
- data/docs/extensions/s3.svg +3 -0
- data/docs/extensions/sdks.svg +3 -0
- data/docs/extensions/security_identity.svg +3 -0
- data/docs/extensions/server_racks.svg +3 -0
- data/docs/extensions/shipments.svg +3 -0
- data/docs/extensions/site_map.svg +3 -0
- data/docs/extensions/stairs.svg +3 -0
- data/docs/extensions/standard.svg +3 -0
- data/docs/extensions/system_management.svg +3 -0
- data/docs/extensions/tables_chairs.svg +3 -0
- data/docs/extensions/technology.svg +3 -0
- data/docs/extensions/transistors.svg +3 -0
- data/docs/extensions/ui_containers.svg +3 -0
- data/docs/extensions/ui_input.svg +3 -0
- data/docs/extensions/ui_menus.svg +3 -0
- data/docs/extensions/ui_misc.svg +3 -0
- data/docs/extensions/ui_widgets.svg +3 -0
- data/docs/extensions/uml_class_diagram.svg +3 -0
- data/docs/extensions/uml_component.svg +3 -0
- data/docs/extensions/uml_entity_relationship.svg +3 -0
- data/docs/extensions/uml_sequence.svg +3 -0
- data/docs/extensions/uml_state_activity.svg +3 -0
- data/docs/extensions/uml_use_case.svg +3 -0
- data/docs/extensions/value_stream_mapping.svg +3 -0
- data/docs/extensions/valves.svg +3 -0
- data/docs/extensions/venn_gradient.svg +3 -0
- data/docs/extensions/venn_plain.svg +3 -0
- data/docs/extensions/vessels.svg +3 -0
- data/docs/extensions.md +614 -0
- data/docs/project_done.svg +1 -1
- data/docs/project_in_progress.svg +1 -1
- data/docs/project_todo.svg +1 -1
- data/docs/samples/grid-direction-horizontal.svg +1 -1
- data/docs/samples/grid-direction-vertical.svg +1 -1
- data/docs/samples/html-shapes.svg +3 -0
- data/docs/samples/samples.md +4 -0
- data/docs/samples/samples.svg +1 -1
- data/docs/samples/styles-glass.svg +1 -1
- data/docs/samples/styles-plain.svg +1 -1
- data/docs/samples/styles-rounded.svg +1 -1
- data/docs/samples/styles-shadow.svg +1 -1
- data/docs/samples/styles-sketch.svg +1 -1
- data/docs/samples/themes-random.svg +1 -1
- data/lib/drawio_dsl/configuration_shapes.rb +14 -8
- data/lib/drawio_dsl/dom_builder.rb +23 -8
- data/lib/drawio_dsl/dom_builder_shapes.rb +97 -82
- data/lib/drawio_dsl/drawio_extensions.json +14024 -0
- data/lib/drawio_dsl/drawio_extensions.rb +4599 -0
- data/lib/drawio_dsl/drawio_extensions_active.rb +32 -0
- data/lib/drawio_dsl/drawio_shapes.rb +114 -96
- data/lib/drawio_dsl/formatters/_.rb +8 -0
- data/lib/drawio_dsl/formatters/base_formatter.rb +24 -0
- data/lib/drawio_dsl/formatters/factory.rb +33 -0
- data/lib/drawio_dsl/formatters/html_builder.rb +84 -0
- data/lib/drawio_dsl/formatters/interface_formatter.rb +53 -0
- data/lib/drawio_dsl/formatters/klass_formatter.rb +52 -0
- data/lib/drawio_dsl/formatters/style_builder.rb +63 -0
- data/lib/drawio_dsl/layout_engine.rb +17 -7
- data/lib/drawio_dsl/schema/_.rb +7 -4
- data/lib/drawio_dsl/schema/diagram.rb +1 -1
- data/lib/drawio_dsl/schema/layouts/flex_layout.rb +1 -2
- data/lib/drawio_dsl/schema/layouts/grid_layout.rb +1 -2
- data/lib/drawio_dsl/schema/layouts/layout.rb +0 -3
- data/lib/drawio_dsl/schema/node.rb +16 -3
- data/lib/drawio_dsl/schema/node_list.rb +20 -1
- data/lib/drawio_dsl/schema/page.rb +14 -7
- data/lib/drawio_dsl/schema/shapes/interface.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/klass.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/shape.rb +25 -11
- data/lib/drawio_dsl/schema/shapes/todo.rb +9 -0
- data/lib/drawio_dsl/schema/virtual/anchor.rb +2 -0
- data/lib/drawio_dsl/version.rb +1 -1
- data/lib/drawio_dsl/xml_builder.rb +4 -9
- data/lib/drawio_dsl.rb +3 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +174 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1032026c1c77b8743c93aab81ebb8f78ec972cb7f0997823d9b64837e6ab4c34
|
4
|
+
data.tar.gz: 26b21a1aa90b3740c6b080bc650af25ee4f386ce673ca71efe04723d1288cbc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 980bd6c45544bd734fb15b863d59e1e2ffb3e45c9ad3ccb5a9b93896cd2658a9009bd7572d1312698930da2193d17215f73ff823ce8dd2c138cda5655bda80ff
|
7
|
+
data.tar.gz: 2f4b640efce45016ac846e37078d17ffda64685c966dbd486c12f7164fdb6b5791c0bbb7c6b0ddc9d17c38f196a5eb8a35abb03b4c0dea64e70d5392c78aa06f
|
data/.builders/.data/shapes.json
CHANGED
@@ -134,6 +134,42 @@
|
|
134
134
|
"h": 160,
|
135
135
|
"style_modifiers": "shape=cloud"
|
136
136
|
},
|
137
|
+
{
|
138
|
+
"type": "container",
|
139
|
+
"text_only": false,
|
140
|
+
"x": 0,
|
141
|
+
"y": 0,
|
142
|
+
"w": 160,
|
143
|
+
"h": 160,
|
144
|
+
"style_modifiers": "swimlane"
|
145
|
+
},
|
146
|
+
{
|
147
|
+
"type": "container2",
|
148
|
+
"text_only": false,
|
149
|
+
"x": 0,
|
150
|
+
"y": 0,
|
151
|
+
"w": 160,
|
152
|
+
"h": 160,
|
153
|
+
"style_modifiers": "swimlane;horizontal=0"
|
154
|
+
},
|
155
|
+
{
|
156
|
+
"type": "container3",
|
157
|
+
"text_only": false,
|
158
|
+
"x": 0,
|
159
|
+
"y": 0,
|
160
|
+
"w": 160,
|
161
|
+
"h": 160,
|
162
|
+
"style_modifiers": "swimlane;startSize=50"
|
163
|
+
},
|
164
|
+
{
|
165
|
+
"type": "container4",
|
166
|
+
"text_only": false,
|
167
|
+
"x": 0,
|
168
|
+
"y": 0,
|
169
|
+
"w": 160,
|
170
|
+
"h": 160,
|
171
|
+
"style_modifiers": "swimlane;resizable=0"
|
172
|
+
},
|
137
173
|
{
|
138
174
|
"type": "cross",
|
139
175
|
"text_only": false,
|
@@ -189,40 +225,22 @@
|
|
189
225
|
"style_modifiers": "shape=hexagon"
|
190
226
|
},
|
191
227
|
{
|
192
|
-
"type": "
|
193
|
-
"text_only": false,
|
194
|
-
"x": 0,
|
195
|
-
"y": 0,
|
196
|
-
"w": 160,
|
197
|
-
"h": 160,
|
198
|
-
"style_modifiers": "swimlane"
|
199
|
-
},
|
200
|
-
{
|
201
|
-
"type": "container2",
|
202
|
-
"text_only": false,
|
203
|
-
"x": 0,
|
204
|
-
"y": 0,
|
205
|
-
"w": 160,
|
206
|
-
"h": 160,
|
207
|
-
"style_modifiers": "swimlane;horizontal=0"
|
208
|
-
},
|
209
|
-
{
|
210
|
-
"type": "container3",
|
228
|
+
"type": "interface",
|
211
229
|
"text_only": false,
|
212
230
|
"x": 0,
|
213
231
|
"y": 0,
|
214
232
|
"w": 160,
|
215
233
|
"h": 160,
|
216
|
-
"style_modifiers": "
|
234
|
+
"style_modifiers": "align=left;overflow=fill;fontSize=12;fontFamily=Helvetica"
|
217
235
|
},
|
218
236
|
{
|
219
|
-
"type": "
|
237
|
+
"type": "klass",
|
220
238
|
"text_only": false,
|
221
239
|
"x": 0,
|
222
240
|
"y": 0,
|
223
241
|
"w": 160,
|
224
242
|
"h": 160,
|
225
|
-
"style_modifiers": "
|
243
|
+
"style_modifiers": "align=left;overflow=fill;fontSize=12;fontFamily=Helvetica"
|
226
244
|
},
|
227
245
|
{
|
228
246
|
"type": "note",
|
@@ -287,6 +305,15 @@
|
|
287
305
|
"h": 50,
|
288
306
|
"style_modifiers": "verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.tick"
|
289
307
|
},
|
308
|
+
{
|
309
|
+
"type": "todo",
|
310
|
+
"text_only": false,
|
311
|
+
"x": 0,
|
312
|
+
"y": 0,
|
313
|
+
"w": 300,
|
314
|
+
"h": 60,
|
315
|
+
"style_modifiers": ""
|
316
|
+
},
|
290
317
|
{
|
291
318
|
"type": "face",
|
292
319
|
"text_only": false,
|
@@ -6,8 +6,8 @@ module DrawioDsl
|
|
6
6
|
module DomBuilderShapes
|
7
7
|
{{#each shapes}}
|
8
8
|
|
9
|
-
def add_{{snake ./type}}(**opts)
|
10
|
-
{{snake ./type}} = DrawioDsl::Schema::{{camel ./type}}.new(current_page, **opts)
|
9
|
+
def add_{{snake ./type}}(**opts, &block)
|
10
|
+
{{snake ./type}} = DrawioDsl::Schema::{{camel ./type}}.new(current_page, **opts, &block)
|
11
11
|
add_shape({{snake ./type}})
|
12
12
|
end
|
13
13
|
{{/each}}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DrawioDsl
|
4
|
+
# :nocov:
|
5
|
+
class DrawIoExtensions
|
6
|
+
|
7
|
+
attr_reader :sections
|
8
|
+
attr_reader :current_section
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@sections = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def section(name)
|
15
|
+
@current_section = {
|
16
|
+
name: name,
|
17
|
+
shapes: []
|
18
|
+
}
|
19
|
+
@sections << current_section
|
20
|
+
|
21
|
+
yield if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def shape(name, style, original_name)
|
25
|
+
shape = {
|
26
|
+
name: name,
|
27
|
+
style: style,
|
28
|
+
original_name: original_name
|
29
|
+
}
|
30
|
+
current_section[:shapes] << shape
|
31
|
+
shape
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_h
|
35
|
+
{
|
36
|
+
sections: @sections.map(&:to_h)
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
# This methods was generated using Extensions.js
|
41
|
+
# This generation can be improved over time and the code to do the generation
|
42
|
+
# can be found in the .builders/generators/10-transform-drawio-js.rb.
|
43
|
+
# original source: ~/dev/tools/drawio-desktop/drawio/src/main/webapp/js/diagramly/Extensions.js
|
44
|
+
def build_extensions
|
45
|
+
# Constants
|
46
|
+
{{{constants}}}
|
47
|
+
{{#each sections}}
|
48
|
+
section :{{snake ./name}} do
|
49
|
+
{{#each ./shapes}}
|
50
|
+
shape :{{padr (snake ./name) 60}}, "{{{./style}}}", "{{./name}}"
|
51
|
+
{{/each}}
|
52
|
+
end
|
53
|
+
{{/each}}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
# :nocov:
|
57
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
KManager.model :shapes, namespace: %i[domain] do
|
1
|
+
m = KManager.model :shapes, namespace: %i[domain] do
|
2
2
|
# microapp = import(:handlebars_helpers, :microapp)
|
3
3
|
|
4
4
|
table :shapes do
|
@@ -24,16 +24,18 @@ KManager.model :shapes, namespace: %i[domain] do
|
|
24
24
|
row :callout4 , false, 0, 0, 160, 120, 'shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;'
|
25
25
|
row :circle , false, 0, 0, 160, 160, 'ellipse'
|
26
26
|
row :cloud , false, 0, 0, 160, 160, 'shape=cloud'
|
27
|
+
row :container , false, 0, 0, 160, 160, 'swimlane'
|
28
|
+
row :container2 , false, 0, 0, 160, 160, 'swimlane;horizontal=0'
|
29
|
+
row :container3 , false, 0, 0, 160, 160, 'swimlane;startSize=50'
|
30
|
+
row :container4 , false, 0, 0, 160, 160, 'swimlane;resizable=0'
|
27
31
|
row :cross , false, 0, 0, 50, 50, 'verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.x'
|
28
32
|
row :envelop , false, 0, 0, 160, 100, 'shape=message'
|
29
33
|
row :diamond , false, 0, 0, 100, 100, 'rhombus'
|
30
34
|
row :document , false, 0, 0, 160, 160, 'shape=mxgraph.basic.document'
|
31
35
|
row :ellipse , false, 0, 0, 200, 120, 'ellipse'
|
32
36
|
row :hexagon , false, 0, 0, 200, 120, 'shape=hexagon'
|
33
|
-
row :
|
34
|
-
row :
|
35
|
-
row :container3 , false, 0, 0, 160, 160, 'swimlane;startSize=50'
|
36
|
-
row :container4 , false, 0, 0, 160, 160, 'swimlane;resizable=0'
|
37
|
+
row :interface , false, 0, 0, 160, 160, 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
|
38
|
+
row :klass , false, 0, 0, 160, 160, 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
|
37
39
|
row :note , false, 0, 0, 160, 160, 'shape=note'
|
38
40
|
row :process , false, 0, 0, 200, 120, 'shape=process'
|
39
41
|
row :rectangle , false, 0, 0, 200, 120, ''
|
@@ -41,6 +43,7 @@ KManager.model :shapes, namespace: %i[domain] do
|
|
41
43
|
row :square , false, 0, 0, 160, 160, ''
|
42
44
|
row :step , false, 0, 0, 120, 80, 'shape=step;perimeter=stepPerimeter;fixedSize=1'
|
43
45
|
row :tick , false, 0, 0, 50, 50, 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.tick'
|
46
|
+
row :todo , false, 0, 0, 300, 60, ''
|
44
47
|
row :face , false, 0, 0, 100, 100, 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.smiley'
|
45
48
|
row :triangle , false, 0, 0, 100, 100, 'triangle'
|
46
49
|
|
@@ -60,3 +63,5 @@ KManager.model :shapes, namespace: %i[domain] do
|
|
60
63
|
.add_file('shapes.json', content: shapes, on_exist: :write)
|
61
64
|
end
|
62
65
|
end
|
66
|
+
|
67
|
+
|
@@ -0,0 +1,195 @@
|
|
1
|
+
KManager.action :transform_drawio_js do
|
2
|
+
|
3
|
+
action do
|
4
|
+
director = KDirector::Dsls::BasicDsl
|
5
|
+
.init(k_builder,
|
6
|
+
on_exist: :write, # %i[skip write compare]
|
7
|
+
on_action: :execute # %i[queue execute]
|
8
|
+
)
|
9
|
+
.blueprint do
|
10
|
+
cd(:data)
|
11
|
+
|
12
|
+
source_file = '/Users/davidcruwys/dev/tools/drawio-desktop/drawio/src/main/webapp/js/diagramly/Extensions.js'
|
13
|
+
target_file = k_builder.target_folders.get_filename(:data, 'extensions.js')
|
14
|
+
|
15
|
+
clean = CleanExtensionsJs.new(source_file, target_file)
|
16
|
+
|
17
|
+
cd(:lib)
|
18
|
+
|
19
|
+
clean.parse
|
20
|
+
|
21
|
+
add_file('drawio_extensions.json', content: clean.build_json)
|
22
|
+
add('drawio_extensions.rb', constants: clean.constants, sections: clean.sections)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class CleanExtensionsJs
|
28
|
+
def initialize(source_file, target_file)
|
29
|
+
@source_file = source_file
|
30
|
+
@target_file = target_file
|
31
|
+
@source = File.read(@source_file)
|
32
|
+
@constants = []
|
33
|
+
@builder = ExtensionJsBuilder.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse
|
37
|
+
split_source
|
38
|
+
end
|
39
|
+
|
40
|
+
def build_json
|
41
|
+
@builder.build_json
|
42
|
+
end
|
43
|
+
|
44
|
+
def build_ruby
|
45
|
+
@builder.build_ruby
|
46
|
+
end
|
47
|
+
|
48
|
+
def constants
|
49
|
+
@builder.constants.join("\n")
|
50
|
+
end
|
51
|
+
|
52
|
+
def sections
|
53
|
+
@builder.sections.select { |s| s[:shapes].length > 0 }
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def split_source
|
59
|
+
source_lines = @source.split("\n")
|
60
|
+
section = :unknown
|
61
|
+
|
62
|
+
source_lines.each do |line|
|
63
|
+
if line.include?('// Global import transformation')
|
64
|
+
section = :constants
|
65
|
+
next
|
66
|
+
elsif line.include?('var styleMap = {') && !line.include?('var styleMap = {};')
|
67
|
+
puts '-----------------------------------'
|
68
|
+
section = :style_map
|
69
|
+
next
|
70
|
+
elsif line.include?('};') ||
|
71
|
+
line.include?('//Instead of doing a massive code refactoring, thees ugly global variables are used')
|
72
|
+
section = :unknown
|
73
|
+
end
|
74
|
+
|
75
|
+
if section == :constants
|
76
|
+
@builder.process_constant(line)
|
77
|
+
end
|
78
|
+
|
79
|
+
if section == :style_map
|
80
|
+
@builder.process_style_map(line)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def process_style_map(line)
|
86
|
+
line
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class ExtensionJsBuilder
|
91
|
+
attr_accessor :constants
|
92
|
+
attr_accessor :shapes
|
93
|
+
attr_accessor :sections
|
94
|
+
attr_accessor :current_section
|
95
|
+
|
96
|
+
def initialize
|
97
|
+
@constants = []
|
98
|
+
@shapes = []
|
99
|
+
@sections = []
|
100
|
+
@current_section = nil
|
101
|
+
end
|
102
|
+
|
103
|
+
def process_constant(line)
|
104
|
+
line = line.gsub(' ', '').gsub('var ', '').gsub(/;$/, '')
|
105
|
+
@constants << " #{line}"
|
106
|
+
end
|
107
|
+
|
108
|
+
def process_style_map(line)
|
109
|
+
line = clean_line(line)
|
110
|
+
|
111
|
+
return if kill_line(line)
|
112
|
+
|
113
|
+
if line.start_with?('#')
|
114
|
+
set_section(line)
|
115
|
+
return
|
116
|
+
end
|
117
|
+
|
118
|
+
return unless current_section
|
119
|
+
|
120
|
+
parts = process_line(line)
|
121
|
+
|
122
|
+
if parts.length == 2
|
123
|
+
name = parts[0]
|
124
|
+
style = parts[1]
|
125
|
+
current_section[:shapes] << { name: name, style: style }
|
126
|
+
shapes << line
|
127
|
+
else
|
128
|
+
puts 'length not 2'
|
129
|
+
puts line
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def process_line(line)
|
134
|
+
line.split(':').map { |s| s.strip.gsub('"', '') }
|
135
|
+
end
|
136
|
+
|
137
|
+
def clean_line(line)
|
138
|
+
line
|
139
|
+
.strip
|
140
|
+
.gsub(' ', ' ')
|
141
|
+
.gsub(' ', ' ')
|
142
|
+
.gsub(' :', ':')
|
143
|
+
.gsub("don't", 'do not')
|
144
|
+
.gsub('//TODO', '')
|
145
|
+
.gsub(/(\/\/)([^ ])/) do |_|
|
146
|
+
match = Regexp.last_match
|
147
|
+
"// #{match[2]}"
|
148
|
+
end
|
149
|
+
.gsub("'", '"')
|
150
|
+
.gsub('not all variants covered', '')
|
151
|
+
.gsub('Timeline shape', '')
|
152
|
+
.gsub('# not all variants covered', '')
|
153
|
+
.gsub('not all versions supported', '')
|
154
|
+
.gsub('ss + "', '"#{ss}')
|
155
|
+
.gsub('s + "', '"#{s}')
|
156
|
+
.gsub('cs,', '#{cs}')
|
157
|
+
.gsub(/cs$/, '#{cs}')
|
158
|
+
.gsub('" + containerStyle', '#{containerStyle}"')
|
159
|
+
.gsub('kupIcon + "', '"#{kupIcon}')
|
160
|
+
.gsub('gcpIcon + "', '"#{gcpIcon}')
|
161
|
+
.gsub('azur19 + "', '"#{azur19}')
|
162
|
+
.gsub('ssAzure + "', '"#{ssAzure}')
|
163
|
+
.gsub('" + arcSize + "', '#{arcSize}')
|
164
|
+
.gsub('//', '#')
|
165
|
+
.gsub(' ', ' ')
|
166
|
+
.gsub(', #', '')
|
167
|
+
.strip
|
168
|
+
.gsub(/,$/, '')
|
169
|
+
.strip
|
170
|
+
end
|
171
|
+
|
172
|
+
def kill_line(line)
|
173
|
+
line.end_with?('NA') ||
|
174
|
+
line.end_with?('not working properly, needs specific code)') ||
|
175
|
+
line.start_with?('Timeline shapes are postponed, this code is a work-in-progress') ||
|
176
|
+
line.start_with?('# *******') ||
|
177
|
+
line.start_with?('# 2019 mapping') ||
|
178
|
+
line.include?('# "') ||
|
179
|
+
line.include?('# "') ||
|
180
|
+
line.empty?
|
181
|
+
end
|
182
|
+
|
183
|
+
def set_section(line)
|
184
|
+
section = line.gsub('#', '').strip
|
185
|
+
@current_section = {
|
186
|
+
name: section,
|
187
|
+
shapes: []
|
188
|
+
}
|
189
|
+
@sections << current_section
|
190
|
+
end
|
191
|
+
|
192
|
+
def build_json
|
193
|
+
JSON.pretty_generate(@sections)
|
194
|
+
end
|
195
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
KManager.action :transform_drawio_js do
|
2
|
+
|
3
|
+
action do
|
4
|
+
director = DrawioDsl::Drawio
|
5
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
6
|
+
.diagram(theme: :style_10)
|
7
|
+
|
8
|
+
ext = DrawioDsl::DrawIoExtensions.new
|
9
|
+
ext.build_extensions
|
10
|
+
puts ext.sections.length
|
11
|
+
|
12
|
+
ext.sections.select { |s| s[:active] }.each do |section|
|
13
|
+
director.page(section[:name]) do
|
14
|
+
grid_layout(wrap_at: 5)
|
15
|
+
puts section[:name]
|
16
|
+
puts section[:shapes]
|
17
|
+
section[:shapes].select { |s| s[:active] }.each do |shape|
|
18
|
+
square(title: shape[:name], style_modifiers: shape[:style])
|
19
|
+
log.kv(:title, shape[:name])
|
20
|
+
log.kv(:style, shape[:style])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
director
|
25
|
+
.cd(:spec)
|
26
|
+
.save('.samples/20-extensions.drawio')
|
27
|
+
.cd(:docs)
|
28
|
+
|
29
|
+
markdown = "# Extensions\n\n"
|
30
|
+
|
31
|
+
director.builder.diagram.pages.each_with_index do |page, index|
|
32
|
+
page_no = index+1
|
33
|
+
puts "Page #{page_no}, #{page.name}"
|
34
|
+
# director.export_svg("extensions/#{page.name}", page: page_no)
|
35
|
+
markdown += "## #{page.name}\n\n\n\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
director
|
39
|
+
.add('extensions.md', content: markdown)
|
40
|
+
end
|
41
|
+
end
|
@@ -11,8 +11,9 @@ KManager.action :todo_drawio_dsl do
|
|
11
11
|
|
12
12
|
grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
todo(title: 'move DrawioDsl::Formatters::Factory::FORMATTERS to resource file')
|
15
|
+
todo(title: 'move DrawioDsl::Formatters::StyleBuilder::MAPPINGS to resource file')
|
16
|
+
|
16
17
|
end
|
17
18
|
.page('To Do', theme: :style_02, margin_left: 0, margin_top: 0) do
|
18
19
|
|
@@ -21,19 +22,18 @@ KManager.action :todo_drawio_dsl do
|
|
21
22
|
|
22
23
|
grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
square(w: 300, h: 60, title: 'page layout so that you drop elements on and they are positioned correctly, e.g centered, left, right, etc, maybe a grid layout with a wrap of 1 and a width of the page is sufficient')
|
25
|
+
todo(title: 'Add page background to theme, use it whenever the theme is set at a diagram/page level')
|
26
|
+
todo(title: 'need to setup new project plans')
|
27
|
+
todo(title: 'settings style attributes need to de-duplicate, might be best to utilize the new StyleBuilder class')
|
28
|
+
todo(title: 'write SVG directly into other projects')
|
29
|
+
todo(title: 'add :shape and :text-only to random shape generator')
|
30
|
+
todo(title: 'Nodes need to support child nodes')
|
31
|
+
todo(title: 'Grid layout does not position itself in relation to the last element')
|
32
|
+
todo(title: 'Dynamic sized shapes that expand to the size of their text')
|
33
|
+
todo(title: 'Control of text padding left, right, top and bottom')
|
34
|
+
todo(title: 'Improve the theme control over text-only shapes')
|
35
|
+
todo(title: 'x,y settings do not work for shapes within a grid layout')
|
36
|
+
todo(title: 'page layout so that you drop elements on and they are positioned correctly, e.g centered, left, right, etc, maybe a grid layout with a wrap of 1 and a width of the page is sufficient')
|
37
37
|
end
|
38
38
|
.page('Done', theme: :style_06, margin_left: 0, margin_top: 0) do
|
39
39
|
|
@@ -42,12 +42,21 @@ KManager.action :todo_drawio_dsl do
|
|
42
42
|
|
43
43
|
grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
todo(title: 'alter configure_shape so it sets the default shape key and use that for selecting the default HTML formatter')
|
46
|
+
todo(title: 'Add todo shape to simplify project plan drawing')
|
47
|
+
todo(title: 'introduce .value property to shape and let it use either formatted HTML or plain text title')
|
48
|
+
todo(title: 'formatter DSL that can render HTML directly into the value property')
|
49
|
+
todo(title: 'formatter DSL for class and interface generation')
|
50
|
+
todo(title: 'generate extension based graphics based on drawio extensions.js')
|
51
|
+
todo(title: 'active? flag on page defaulting to true. set to false to exclude page from diagram.')
|
52
|
+
todo(title: 'first level child nodes need to hang of node 1')
|
53
|
+
todo(title: 'node has child nodes and add_node will set a nodes parent')
|
54
|
+
todo(title: 'nodes can belong to a parent node, the top level node responds with truthy to root?')
|
55
|
+
todo(title: 'add sample diagram for the github readme file')
|
56
|
+
todo(title: 'write samples into docs folder and display in readme')
|
57
|
+
todo(title: 'add export as .PNG, needs to take a page number as the PNG will not support multiple pages')
|
58
|
+
todo(title: 'add export as .SVG, needs to take a page number as the SVG will not support multiple pages')
|
59
|
+
todo(title: 'add save as .drawio')
|
51
60
|
|
52
61
|
end
|
53
62
|
.cd(:spec)
|
@@ -1,13 +1,5 @@
|
|
1
1
|
KManager.action :bootstrap do
|
2
2
|
action do
|
3
|
-
|
4
|
-
# KConfig.configuration.drawio.square.w = KConfig.configuration.drawio.square.w / 4
|
5
|
-
# KConfig.configuration.drawio.square.h = KConfig.configuration.drawio.square.h / 4
|
6
|
-
# KConfig.configuration.drawio.circle.w = KConfig.configuration.drawio.circle.w / 4
|
7
|
-
# KConfig.configuration.drawio.circle.h = KConfig.configuration.drawio.circle.h / 4
|
8
|
-
# KConfig.configuration.drawio.rectangle.w = KConfig.configuration.drawio.rectangle.w / 4
|
9
|
-
# KConfig.configuration.drawio.rectangle.h = KConfig.configuration.drawio.rectangle.h / 4
|
10
|
-
|
11
3
|
DrawioDsl::Drawio
|
12
4
|
.init(k_builder, on_exist: :write, on_action: :execute)
|
13
5
|
.diagram(theme: :style_01)
|
@@ -1,8 +1,7 @@
|
|
1
1
|
KManager.action :bootstrap do
|
2
2
|
action do
|
3
3
|
|
4
|
-
|
5
|
-
director = DrawioDsl::Drawio
|
4
|
+
DrawioDsl::Drawio
|
6
5
|
.init(k_builder, on_exist: :write, on_action: :execute)
|
7
6
|
.diagram(theme: :style_06)
|
8
7
|
.page('Style-Plain', margin_left: 0, margin_top: 0) do
|
@@ -0,0 +1,48 @@
|
|
1
|
+
KManager.action :html_shapes do
|
2
|
+
action do
|
3
|
+
|
4
|
+
# :rounded, :shadow, :sketch, :glass
|
5
|
+
DrawioDsl::Drawio
|
6
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
7
|
+
.diagram(theme: :style_11)
|
8
|
+
.page('Style-Plain', margin_left: 0, margin_top: 0, rounded: 0, background: '#FFEADB') do
|
9
|
+
grid_layout(wrap_at: 8)
|
10
|
+
|
11
|
+
# html = DrawioDsl::Formatters::InterfaceFormatter.new
|
12
|
+
# .header('IPerson')
|
13
|
+
# .field(:first_name, type: :string)
|
14
|
+
# .field(:last_name, type: :string)
|
15
|
+
# .field(:age, type: :integer)
|
16
|
+
# .field(:birthday, type: :date)
|
17
|
+
# .method(:full_name)
|
18
|
+
# .as_html
|
19
|
+
|
20
|
+
# square(
|
21
|
+
# title: html,
|
22
|
+
# style_modifiers: 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
|
23
|
+
# )
|
24
|
+
|
25
|
+
interface(theme: :style_07) do
|
26
|
+
format
|
27
|
+
.header('IPerson')
|
28
|
+
.field(:field1, type: :string)
|
29
|
+
.field(:field2, type: :string)
|
30
|
+
.method(:full_name, type: :string)
|
31
|
+
end
|
32
|
+
|
33
|
+
klass do
|
34
|
+
format(:class)
|
35
|
+
.header('Person')
|
36
|
+
.field(:field1, type: :string)
|
37
|
+
.field(:field2, type: :string)
|
38
|
+
.field(:age, type: :integer)
|
39
|
+
.field(:birthday, type: :date)
|
40
|
+
.method(:full_name, type: :string)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
.cd(:spec)
|
44
|
+
.save('.samples/30-html-shapes.drawio')
|
45
|
+
.cd(:docs)
|
46
|
+
.export_svg('samples/html-shapes', page: 1)
|
47
|
+
end
|
48
|
+
end
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
# [0.7.0](https://github.com/klueless-io/drawio_dsl/compare/v0.6.0...v0.7.0) (2022-03-14)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* add support for HTML formatters to shapes ([14b05e2](https://github.com/klueless-io/drawio_dsl/commit/14b05e2c55ea61ad8f275d678ca4fcff8a43b466))
|
7
|
+
* add support for html shapes ([d2d0e72](https://github.com/klueless-io/drawio_dsl/commit/d2d0e72bef8f44c244dd209d191ab29aea0091c1))
|
8
|
+
|
9
|
+
# [0.6.0](https://github.com/klueless-io/drawio_dsl/compare/v0.5.7...v0.6.0) (2022-03-13)
|
10
|
+
|
11
|
+
|
12
|
+
### Bug Fixes
|
13
|
+
|
14
|
+
* update failing tests ([37ebbbd](https://github.com/klueless-io/drawio_dsl/commit/37ebbbd37cf70b150c83dbd2a389c6f176a917cf))
|
15
|
+
* update pre-commit ([374a29b](https://github.com/klueless-io/drawio_dsl/commit/374a29bad9f50ac01b670d6bfa01e42e9864e00e))
|
16
|
+
|
17
|
+
|
18
|
+
### Features
|
19
|
+
|
20
|
+
* first level child nodes need to hang of node 1, build example shapes from extensions.js ([4b233fb](https://github.com/klueless-io/drawio_dsl/commit/4b233fb452eafa8052e7d5014e19bec07ecf5657))
|
21
|
+
|
22
|
+
## [0.5.7](https://github.com/klueless-io/drawio_dsl/compare/v0.5.6...v0.5.7) (2022-03-09)
|
23
|
+
|
24
|
+
|
25
|
+
### Bug Fixes
|
26
|
+
|
27
|
+
* Nodes can belong to a parent node, the top level node responds with truthy to root? ([3ab5dad](https://github.com/klueless-io/drawio_dsl/commit/3ab5dad60a81880cb603be9ab9f82994d8ac2562))
|
28
|
+
|
1
29
|
## [0.5.6](https://github.com/klueless-io/drawio_dsl/compare/v0.5.5...v0.5.6) (2022-03-08)
|
2
30
|
|
3
31
|
|